dag_name: generate_models
description: Создает файлы моделей dbt, заполненные содержимым по умолчанию, т.е. вызовом макросов по каждому шагу методологии dataCraft Core
status: требуется доработка
doc_status: in progress
type: dag
Обзор
Решаемая задача: Создает файлы моделей dbt, заполненные содержимым по умолчанию, т.е. вызовом макросов по каждому шагу методологии dataCraft Core.
DAG обеспечивает следующий рабочий процесс построения проекта в dbt:
При запуске DAG создаёт структуру папок, соответствующую слоям методологии dataCraft Core, и записывает в них файлы. Содержимое каждого файла — это вызов соответствующего макроса из пакета dbt-datacraft
без аргументов, что подразумевает использование поведения макроса по умолчанию.
Далее пользователь может кастомизировать свои модели: добавлять новые и изменять сгенерированные. Чтобы пользовательские изменения не затёрлись при повторном вызове DAG'а, нужно их либо переименовать, либо положить в специальную папку (см. раздел Подготовка).
Файлы, не удовлетворяющие условиям выше, при вызове DAG’а удаляет и генерирует заново.
basic_config.dbt_dir
— путь к проекту dbt (абсолютный или относительный папки с DAG’ами).
basic_config.dbt_models_dir
— путь к папке с моделями для генерации относительно basic_config.dbt_dir
.
Вначале DAG очищает директорию, в которой он будет генерировать файлы. На месте остаются лишь файлы, кастомизированные (созданные или измененные) пользователем. Чтобы DAG понял, что файлы кастомизированы должно выполняться одно из следующих условий:
_manual.sql
. При изменении сгенерированного файла пользователь может просто переименовать его, дописав _manual
._manual
(или в одной из её подпапок). В этом случае отдельные файлы можно не переименовывать и называть как угодно.prepare
Словарь, в котором названия папок являются ключами, а на нижнем уровне вложенности находится список генерируемых объектов с полями file_name
, path
и content
:
{
'1_silos': {
'normalize': [
{
'file_name': 'normalize_appmetrica_events_default_events.sql',
'path': '/mnt/c/test/models_test_airflow_NEW_v4/1_silos/1_normalize',
'content': '{{% raw %}}{{{{ datacraft.normalize() }}}}{{% endraw %}}'
},
{
'file_name': 'normalize_appmetrica_events_default_deeplinks.sql',
'path': '/mnt/c/test/models_test_airflow_NEW_v4/1_silos/1_normalize',
'content': '{{% raw %}}{{{{ datacraft.normalize() }}}}{{% endraw %}}'
},
{
'file_name': 'normalize_appmetrica_events_default_installations.sql',
'path': '/mnt/c/test/models_test_airflow_NEW_v4/1_silos/1_normalize',
'content': '{{% raw %}}{{{{ datacraft.normalize() }}}}{{% endraw %}}'
}
],
'incremental': [
{
'file_name': 'incremental_appmetrica_events_default_events.sql',
'path': '/mnt/c/test/models_test_airflow_NEW_v4/1_silos/2_incremental',
'content': "{{% raw %}}-- depends_on: {{{{ ref('normalize_appmetrica_events_default_events') }}}}{{% endraw %}}\n{{% raw %}}{{{{ datacraft.incremental() }}}}{{% endraw %}}"
},
{
'file_name': 'incremental_appmetrica_events_default_deeplinks.sql',
'path': '/mnt/c/test/models_test_airflow_NEW_v4/1_silos/2_incremental',
'content': "{{% raw %}}-- depends_on: {{{{ ref('normalize_appmetrica_events_default_deeplinks') }}}}{{% endraw %}}\n{{% raw %}}{{{{ datacraft.incremental() }}}}{{% endraw %}}"
},
{
'file_name': 'incremental_appmetrica_events_default_installations.sql',
'path': '/mnt/c/test/models_test_airflow_NEW_v4/1_silos/2_incremental',
'content': "{{% raw %}}-- depends_on: {{{{ ref('normalize_appmetrica_events_default_installations') }}}}{{% endraw %}}\n{{% raw %}}{{{{ datacraft.incremental() }}}}{{% endraw %}}"
}
]
},
'2_join': {
# Данные для '2_join'
}
# Данные для следующих слоёв
}
DAG создаёт динамическую задачу для каждого генерируемого файла. Оператор datacraftCreateFileOperator
при необходимости создаёт родительские папки, формирует файл и записывает в него содержимое, переданное через аргумент.
В папке моделей проекта dbt созданы все необходимые модели, преобразующие сырые данные в готовые к использованию витрины: